package itsm.isperp.module.repository.app;

import itsm.isperp.framework.data.domain.DataRequest;
import itsm.isperp.framework.data.domain.DataResponse;
import itsm.isperp.framework.data.mybatis.dao.CUDMapper;
import itsm.isperp.module.dto.app.AppUserRoleDTO;
import itsm.isperp.module.dto.app.VAppDepartmentUser;
import itsm.isperp.module.entity.app.AppUser;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;
import org.springframework.data.solr.repository.Query;
import org.springframework.data.solr.repository.SolrRepository;
import org.springframework.stereotype.Repository;

/**
 * 
 * 系统用户映射器(创建绑定映射语句的接口)
 * 
 * @author lizx
 * @date 2013-1-12
 * @version V1.0
 */
@Repository
public interface AppUserMapper extends CUDMapper<AppUser>,
		SolrRepository<AppUser, String> {

	/**
	 * 根据人员帐号查询人员信息
	 * 
	 * @param name
	 *            人员姓名
	 * @param columns
	 * @return 人员信息
	 */
	public AppUser findByUsername(@Param("name") String name,
			@Param("selectColumns") String... selectColumns);

	/**
	 * 根据用户传输对象保存用户信息
	 * 
	 * @param id
	 *            用户唯一标识
	 * @param appUserDTO
	 *            用户角色传输对象
	 * @return 结果数
	 */
	public int saveByAppUserDTO(String id, AppUserRoleDTO appUserDTO);

	/**
	 * 根据用户传输对象更新
	 * 
	 * @param id
	 *            唯一标识
	 * @param appUserDTO
	 *            用户角色传输对象
	 */
	public void updateByAppUserDTO(String id, AppUserRoleDTO appUserDTO);

	/**
	 * 使用全文检索查询用户姓名
	 * 
	 * @param fullname
	 * @return
	 */
	@Query(fields = { "id", "fullname" })
	public List<AppUser> searchByFullname(String fullname);

	/**
	 * 返回一个用户信息列表（此方法用于测试使用，系统中其他位置请不要使用，因为此方法随时可能被修改）
	 * 
	 * @return List<Map>
	 */
	public List<Map<String, Object>> findUsers();

	/**
	 * 
	 * @param req
	 * @return
	 */
	DataResponse<VAppDepartmentUser> findUserInRoleByRequest(
			@Param("roleId") String roleId, DataRequest req);
	
	DataResponse<AppUser> findUserByTopDeptIdByRequest(
			@Param("whereSql") String whereSql, DataRequest req);
	
	

	/**
	 * 更新用户状态
	 * 
	 * @param status
	 * @param username
	 */
	public void updateUserStatus(@Param("status") String status,
			@Param("name") String name);

	/**
	 * 更新用户密码
	 * 
	 * @param name
	 *            用户帐号名
	 * @param password
	 *            密码
	 */
	public void updateUserPassword(@Param("name") String name,
			@Param("password") String password);

	/**
	 * 更新用户地理位置
	 * 
	 * @param name
	 *            用户帐号名
	 * @param longitude
	 * @param latitude
	 */
	public void updatePositionInfo(@Param("name") String name,
			@Param("longitude") String longitude,
			@Param("latitude") String latitude);

	/**
	 * 更新所有帐号的状态
	 * 
	 * @param enableenable
	 */
	public void updateAllEnable(boolean enable);

	/**
	 * 获取用户关联的客户的所有项目
	 * 
	 * @param req
	 * @return
	 */
	public List<Map<String, Object>> findUserProjects(DataRequest req);
}
